package com.example.raidball;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Point;
import android.util.Log;

public class createWorld {
	
	/*
	 *  VARIABLE DU NIVEAU EN COURS !! (cf. class Levels)
	 */
	private int[][] currentLevel = Levels.LEVEL_101;
	private Point startPozisheun;
	
	/*
	 * BOOLEAN de debug, si true, dessine la grille de jeu.
	 * En realite ca dessine les case vide (idblock=0) avec l'image de bordure rouge.
	 */
	private boolean isDebug_affiche_grille_de_jeu = false;
	
	private BounceView myBounce;											// class parente
	private int tailleCase = 50;											// taille d'une case de jeu
	private List<Rectangle> rect_list = new ArrayList<Rectangle>();			// list des cases
	private List<Rectangle> collision_list = new ArrayList<Rectangle>();	// list des collisions (murs)
	
	/**
	 * Constructeur
	 * @param context
	 */
	public createWorld(Context context, BounceView _mabounce, int f) {
		myBounce = _mabounce;
		if(f==0){
			currentLevel = Levels.LEVEL_101;
		}
		if(f==1){
			currentLevel = Levels.LEVEL_102;
		}
		if(f==2){
			currentLevel = Levels.LEVEL_103;
		}
		
		/*
		 * Initialisation du Point(x,y) de la case depart
		 */
		this.startPozisheun = null;
		for (int j=0; j<currentLevel.length; j++) {			/* /!\ i et j inverted car mode paysage /!\ */
			for (int i=0; i<currentLevel[j].length; i++) {
				if (currentLevel[j][i] == 3)
					this.startPozisheun = new Point(i*tailleCase, j*tailleCase);
			}
		}
		if (this.startPozisheun == null) {
			Log.d("Positon bille start", "Aucune case depart trouvee ... cest balo");
			this.startPozisheun = new Point(0,0);
		}
	}
	
	/**
	 * Appel central de l'afichage (depuis l'exterieur i.e:BounceView)
	 * @param canva
	 */
	public void drawKetchose(Canvas canva) {
		draw_init(canva);		// initialise le tableau de jeu (une seule fois).
		draw_list(canva);		// dessine le tableau de cases de jeu.
	}
	
	/**
	 * Initialise la liste RECT_LIST avant de commencer a l'afficher and co.
	 * @param kanva
	 */
	public void draw_init(Canvas kanva) {
		// Les 4 variables suivantes sont inutiles. Elles me servent pour lire les valeurs en debug mode.
		int width = kanva.getWidth();
		int height = kanva.getHeight();
		int widthCase = width/tailleCase;
		int heightCase = height/tailleCase;
		/*
		 * widthCase = 9 CASES		(de 0 a 8)
		 * heightCase = 16 CASES	(de 0 a 15)
		 * SUR LE TEL DE TIFFANY ON A UN TABLEAU DE __ 9x16 __ CASES
		 */
		
		// Si la RECT_LIST est vide on l'initialise avec le niveau 1 de la class Levels.LEVEL_101
		if (rect_list.size() == 0) {
			//for (int i = 0; i <= (kanva.getWidth()/tailleCase); i++) {
				//for (int j = 0; j <= (kanva.getHeight()/tailleCase); j++) {
			for (int j=0; j<currentLevel.length; j++) {			/* /!\ i et j inverted car mode paysage /!\ */
				for (int i=0; i<currentLevel[j].length; i++) {
					Rectangle rect;
					
					//Log.d("tag", "index i -> "+i+" index j ->"+j);
					
					switch (currentLevel[j][i]) {
					case 0:		// 0 = AIR
						if (isDebug_affiche_grille_de_jeu) 
						{
							rect = new Rectangle(tailleCase, tailleCase, i*tailleCase, j*tailleCase, 
									myBounce.getResources().getDrawable(R.drawable.rect_transparent),
									0);
							rect_list.add(rect);
						}
						break;
					case 1:		// 1 = MUR
						rect = new Rectangle(tailleCase, tailleCase, i*tailleCase, j*tailleCase, 
								myBounce.getResources().getDrawable(R.drawable.wall_tree),
								1);
						rect_list.add(rect);
						break;
					case 2:		// 2 = TROU
						rect = new Rectangle(tailleCase, tailleCase, i*tailleCase, j*tailleCase, 
								myBounce.getResources().getDrawable(R.drawable.hole),
								2);
						rect_list.add(rect);
						break;
					case 3:		// 3 = START
						rect = new Rectangle(tailleCase, tailleCase, i*tailleCase, j*tailleCase, 
								myBounce.getResources().getDrawable(R.drawable.start2),
								3);
						rect_list.add(rect);
						break;
					case 4:		// 4 = FINISH
						rect = new Rectangle(tailleCase, tailleCase, i*tailleCase, j*tailleCase, 
								myBounce.getResources().getDrawable(R.drawable.finish2),
								4);
						rect_list.add(rect);
						break;
					default:
						Log.d("test", "default");
						/* - si on arrive ici, c'est que la case lue dans le tableau LEVEL_101 n'est pas valide
						/  ou bien [i][j] en dehors du tableau LEVEL_101 */
						;
					}
				}
			}
		}
	}
	
	/**
	 * Dessination de la map et
	 * remplissage de la COLLISION_LIST qui contient toutes les cases.
	 * @param canva
	 */
	public void draw_list(Canvas canva) {
		// dessine tout les rectangles de la game
		
			for (Rectangle rect : rect_list) {
				// si c'est un mur, on l'ajoute dans la collision_list.
				if (rect.getIdBlock() == 1) {
					collision_list.add(rect);
				}
				rect.sprite.setBounds(rect.posX, rect.posY, rect.posX+tailleCase, rect.posY+tailleCase);
				rect.sprite.draw(canva);
			}
		
		

	}
	
	/**
	 * GETTERz
	 * @return
	 */
	public List<Rectangle> getRectList() { return this.rect_list; }
	public List<Rectangle> getCollisionList() { return this.collision_list; }
	public Point getStartPos() { return this.startPozisheun; }
}
